#ifndef _MSC_VER
#define NOEXCEPT noexcept
#define NOEXCEPTX noexcept
#define NOEXCEPT_OP noexcept
#else
#define NOEXCEPT _NOEXCEPT
#define NOEXCEPTX
#define NOEXCEPT_OP(x) _NOEXCEPT_OP(x)
#endif

#ifndef _DEBUG_H_
#define _DEBUG_H_

#include<memory>
#include<string>
#include<exception>

#include"Common.h"

namespace Debug{

/*
@brief 
*/
class CFatal : public std::exception
{
public:
	CFatal(const std::string& error_message);
	virtual const char* what() const throw() override;

private:
	const std::string m_error_message;
};


void check_assertion(bool assertion, const std::string& err_msg);
void die(const std::string& error_message);

void log(const std::string& log_msg, ...);
void log_output(const char* format, va_list args);

}

#endif